{# Template for C++ class source file #}
{% if file_header %}
{{ file_header }}

{% endif %}
{%- if includes %}
{{ includes }}

{% endif %}
{%- if namespace_parts %}
namespace {{ namespace_parts | join('::') }} {

{% endif %}
{%- if constructors %}
{%- for ctor in constructors %}
{{ ctor.signature }} {
{%- if ctor.body %}
{{ ctor.body | indent(4, first=False) }}
{%- else %}
    // TODO: Implement constructor
{%- endif %}
}
{%- if not loop.last %}

{%- endif %}
{%- endfor %}
{% endif %}
{%- if destructor %}

{{ destructor.signature }} {
{%- if destructor.body %}
{{ destructor.body | indent(4, first=False) }}
{%- else %}
    // TODO: Implement destructor
{%- endif %}
}
{%- endif %}
{%- if methods %}

{%- for method in methods %}
{{ method.signature }} {
{%- if method.body %}
{{ method.body | indent(4, first=False) }}
{%- else %}
    throw std::runtime_error("{{ method.name }}: Not implemented");
{%- endif %}
}
{%- if not loop.last %}

{%- endif %}
{%- endfor %}
{%- endif %}
{%- if namespace_parts %}

}  // namespace {{ namespace_parts | join('::') }}
{%- endif %}
